import 'package:flutter_custom_calendar/utils/lunar_util.dart';

class UDateUtil {
  static getBirthdayString(DateTime currentDate) {
    String born = getBorn(currentDate.year);
    String age = getAge(currentDate.year);
    String constellation = getConstellation(currentDate);
    return '$age • $constellation • $born';
  }

  static getLunarBirthdayString(date) {
    List<int> lunar = LunarUtil.solarToLunar(date.year, date.month, date.day);
    String y = getLunarDizhi(lunar[0]);
    String m = LunarUtil.numToChineseMonth(lunar[1], lunar[3]);
    String d = LunarUtil.numToChinese(lunar[1], lunar[2], lunar[3]);
    return '$y • $m • $d';
  }

  static getAge(int year) {
    return (DateTime.now().year - year).toString() + '岁';
  }

  /// 通过年份计算属相
  static String getBorn(int year) {
    if (year < 1) {
      return '未知';
    }
    String years = '鼠牛虎兔龙蛇马羊猴鸡狗猪';
    int i = (year - 4) % 12;
    return years.substring(i, i + 1);
  }

  /// 根据日期，返回星座
  static String getConstellation(DateTime date) {
    List<String> constellationArr = [
      '摩羯座', // capricorn 摩羯座（12月22日～1月20日）
      '水瓶座', // aquarius 水瓶座（1月21日～2月19日）
      '双鱼座', // Pisces 双鱼座（2月20日～3月20日）
      '白羊座', // aries 白羊座 3月21日～4月20日
      '金牛座', // taurus 金牛座 4月21～5月21日
      '双子座', // gemini 双子座 5月22日～6月21日
      '巨蟹座', // cancer 巨蟹座（6月22日～7月22日）
      '狮子座', // leo 狮子座（7月23日～8月23日）
      '处女座', // virgo 处女座（8月24日～9月23日）
      '天秤座', // libra 天秤座（9月24日～10月23日）
      '天蝎座', // scorpio 天蝎座（10月24日～11月22日）
      '射手座', // sagittarius 射手座（11月23日～12月21日）
    ];
    List<int> dayArr = [20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22];

    int month = date.month;
    int day = date.day;
    return day < dayArr[month - 1]
        ? constellationArr[month - 1]
        : constellationArr[month];
  }

  /// 根据年份获取到天干地支年份
  static String getLunarDizhi(int year) {
    String years = '子丑寅卯辰巳午未申酉戌亥';
    String tians = '甲乙丙丁戊己庚辛壬癸';
    int i = year - 1900 + 36;
    int i10 = i % 10;
    int i12 = i % 12;
    return tians.substring(i10, i10 + 1) + years.substring(i12, i12 + 1) + '年';
  }
}
